package com.ljx.QueueStack;

import java.util.Arrays;
import java.util.Stack;

/**
 * @author 李加喜
 * @Package com.ljx.QueueStack
 * @date 2021-12-09 10:38
 */
// 739  每日温度 使用的是单调递增栈
public class MeiRiWenDu {
    public static void main(String[] args) {
        MeiRiWenDu meiRiWenDu = new MeiRiWenDu();
        int[] num={73,74,75,71,69,72,76,73};
        System.out.println(Arrays.toString(meiRiWenDu.dailyTemperatures(num)));
    }

    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        Stack<Integer> stack = new Stack<>();

        for (int i = temperatures.length - 1; i >= 0; i--) {
            while (!stack.isEmpty() && temperatures[stack.peek()] <= temperatures[i]) {
                int a=stack.peek();
                //因为他们的存在没有意义，前⾯挡着个
                //「更⾼」的元素，所以他们不可能被作为后续进来的元素的 Next Great Number 了
                // 核心部分  stack.pop()获取的其实就是这个元素后面的元素
                stack.pop();
            }
            res[i] = stack.isEmpty() ? 0 : (stack.peek() - i);
            stack.push(i);
        }
        return res;
    }
    //    vector<int> nextGreaterElement(vector<int>& nums) {
//        vector<int> res(nums.size()); // 存放答案的数组
//        stack<int> s;
//// 倒着往栈⾥放
//        for (int i = nums.size() - 1; i >= 0; i--) {
//// 判定个⼦⾼矮
//            while (!s.empty() && s.top() <= nums[i]) {
//// 矮个起开，反正也被挡着了。。。
//                s.pop();
//            }
//// nums[i] 身后的 next great number
//            res[i] = s.empty() ? -1 : s.top();
    // 这里压栈之后  在进行出栈是顺序的  所以获取的数字就会是第一个值
//            s.push(nums[i]);
//        }
//        return res;
//    }
}
